{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 机器学习 Project1\n",
    "张逸敏 51275903084  数据集：[Breast Cancer Wisconsin (Original)](https://archive.ics.uci.edu/dataset/15/breast+cancer+wisconsin+original)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 568,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from statsmodels.stats.outliers_influence import variance_inflation_factor\n",
    "from sklearn.model_selection import train_test_split, KFold, cross_val_score, cross_val_predict\n",
    "from sklearn.linear_model import SGDClassifier, LogisticRegression\n",
    "from sklearn import metrics\n",
    "from sklearn.metrics import roc_curve, precision_recall_curve\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据导入与描述性统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 570,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Code</th>\n",
       "      <th>ClumpThickness</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>CellShape</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>Mitoses</th>\n",
       "      <th>Class</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1000025</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>良性</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1002945</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>良性</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1015425</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>良性</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1016277</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>良性</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1017023</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>良性</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Code  ClumpThickness  CellSize  CellShape  MarginalAdhesion  SECellSize  \\\n",
       "0  1000025               5         1          1                 1           2   \n",
       "1  1002945               5         4          4                 5           7   \n",
       "2  1015425               3         1          1                 1           2   \n",
       "3  1016277               6         8          8                 1           3   \n",
       "4  1017023               4         1          1                 3           2   \n",
       "\n",
       "   BareNuclei  BlandChromatin  NormalNucleoli  Mitoses Class  \n",
       "0           1               3               1        1    良性  \n",
       "1          10               3               2        1    良性  \n",
       "2           2               3               1        1    良性  \n",
       "3           4               3               7        1    良性  \n",
       "4           1               3               1        1    良性  "
      ]
     },
     "execution_count": 570,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('breast-cancer-wisconsin-data.csv')\n",
    "data.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 571,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "data = data.drop(['Code'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 572,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# data.info()  # 无缺失值数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 573,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 574,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data.hist(bins=15, figsize=(20,15))\n",
    "# plt.figure(figsize=(4, 3))\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征工程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 将标签和属性分开"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 577,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\zym\\AppData\\Local\\Temp\\ipykernel_17352\\146285836.py:3: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
      "  data['Class'] = data['Class'].replace(\"恶性\", 1)\n"
     ]
    }
   ],
   "source": [
    "# 将良性替换成0，恶行替换成1\n",
    "data['Class'] = data['Class'].replace(\"良性\", 0)\n",
    "data['Class'] = data['Class'].replace(\"恶性\", 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 578,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ClumpThickness</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>CellShape</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>Mitoses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ClumpThickness  CellSize  CellShape  MarginalAdhesion  SECellSize  \\\n",
       "0               5         1          1                 1           2   \n",
       "1               5         4          4                 5           7   \n",
       "2               3         1          1                 1           2   \n",
       "\n",
       "   BareNuclei  BlandChromatin  NormalNucleoli  Mitoses  \n",
       "0           1               3               1        1  \n",
       "1          10               3               2        1  \n",
       "2           2               3               1        1  "
      ]
     },
     "execution_count": 578,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data.iloc[:, :9]\n",
    "X.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 579,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "y = data.iloc[:, 9:]\n",
    "y.head(3)\n",
    "y = y.values.ravel()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 相关性分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 581,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 400x300 with 0 Axes>"
      ]
     },
     "execution_count": 581,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 400x300 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.set_style(\"dark\")\n",
    "plt.figure(figsize = (4,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 582,
   "metadata": {},
   "outputs": [],
   "source": [
    "colnm = data.columns.tolist()[:9]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 583,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ClumpThickness</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>CellShape</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>Mitoses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ClumpThickness</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.644913</td>\n",
       "      <td>0.654589</td>\n",
       "      <td>0.486356</td>\n",
       "      <td>0.521816</td>\n",
       "      <td>0.590008</td>\n",
       "      <td>0.558428</td>\n",
       "      <td>0.535835</td>\n",
       "      <td>0.350034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CellSize</th>\n",
       "      <td>0.644913</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.906882</td>\n",
       "      <td>0.705582</td>\n",
       "      <td>0.751799</td>\n",
       "      <td>0.686673</td>\n",
       "      <td>0.755721</td>\n",
       "      <td>0.722865</td>\n",
       "      <td>0.458693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CellShape</th>\n",
       "      <td>0.654589</td>\n",
       "      <td>0.906882</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.683079</td>\n",
       "      <td>0.719668</td>\n",
       "      <td>0.707474</td>\n",
       "      <td>0.735948</td>\n",
       "      <td>0.719446</td>\n",
       "      <td>0.438911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <td>0.486356</td>\n",
       "      <td>0.705582</td>\n",
       "      <td>0.683079</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.599599</td>\n",
       "      <td>0.666971</td>\n",
       "      <td>0.666715</td>\n",
       "      <td>0.603352</td>\n",
       "      <td>0.417633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SECellSize</th>\n",
       "      <td>0.521816</td>\n",
       "      <td>0.751799</td>\n",
       "      <td>0.719668</td>\n",
       "      <td>0.599599</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.583701</td>\n",
       "      <td>0.616102</td>\n",
       "      <td>0.628881</td>\n",
       "      <td>0.479101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BareNuclei</th>\n",
       "      <td>0.590008</td>\n",
       "      <td>0.686673</td>\n",
       "      <td>0.707474</td>\n",
       "      <td>0.666971</td>\n",
       "      <td>0.583701</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.674215</td>\n",
       "      <td>0.574778</td>\n",
       "      <td>0.342397</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BlandChromatin</th>\n",
       "      <td>0.558428</td>\n",
       "      <td>0.755721</td>\n",
       "      <td>0.735948</td>\n",
       "      <td>0.666715</td>\n",
       "      <td>0.616102</td>\n",
       "      <td>0.674215</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.665878</td>\n",
       "      <td>0.344169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <td>0.535835</td>\n",
       "      <td>0.722865</td>\n",
       "      <td>0.719446</td>\n",
       "      <td>0.603352</td>\n",
       "      <td>0.628881</td>\n",
       "      <td>0.574778</td>\n",
       "      <td>0.665878</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.428336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mitoses</th>\n",
       "      <td>0.350034</td>\n",
       "      <td>0.458693</td>\n",
       "      <td>0.438911</td>\n",
       "      <td>0.417633</td>\n",
       "      <td>0.479101</td>\n",
       "      <td>0.342397</td>\n",
       "      <td>0.344169</td>\n",
       "      <td>0.428336</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  ClumpThickness  CellSize  CellShape  MarginalAdhesion  \\\n",
       "ClumpThickness          1.000000  0.644913   0.654589          0.486356   \n",
       "CellSize                0.644913  1.000000   0.906882          0.705582   \n",
       "CellShape               0.654589  0.906882   1.000000          0.683079   \n",
       "MarginalAdhesion        0.486356  0.705582   0.683079          1.000000   \n",
       "SECellSize              0.521816  0.751799   0.719668          0.599599   \n",
       "BareNuclei              0.590008  0.686673   0.707474          0.666971   \n",
       "BlandChromatin          0.558428  0.755721   0.735948          0.666715   \n",
       "NormalNucleoli          0.535835  0.722865   0.719446          0.603352   \n",
       "Mitoses                 0.350034  0.458693   0.438911          0.417633   \n",
       "\n",
       "                  SECellSize  BareNuclei  BlandChromatin  NormalNucleoli  \\\n",
       "ClumpThickness      0.521816    0.590008        0.558428        0.535835   \n",
       "CellSize            0.751799    0.686673        0.755721        0.722865   \n",
       "CellShape           0.719668    0.707474        0.735948        0.719446   \n",
       "MarginalAdhesion    0.599599    0.666971        0.666715        0.603352   \n",
       "SECellSize          1.000000    0.583701        0.616102        0.628881   \n",
       "BareNuclei          0.583701    1.000000        0.674215        0.574778   \n",
       "BlandChromatin      0.616102    0.674215        1.000000        0.665878   \n",
       "NormalNucleoli      0.628881    0.574778        0.665878        1.000000   \n",
       "Mitoses             0.479101    0.342397        0.344169        0.428336   \n",
       "\n",
       "                   Mitoses  \n",
       "ClumpThickness    0.350034  \n",
       "CellSize          0.458693  \n",
       "CellShape         0.438911  \n",
       "MarginalAdhesion  0.417633  \n",
       "SECellSize        0.479101  \n",
       "BareNuclei        0.342397  \n",
       "BlandChromatin    0.344169  \n",
       "NormalNucleoli    0.428336  \n",
       "Mitoses           1.000000  "
      ]
     },
     "execution_count": 583,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mcorr = data[colnm].corr()\n",
    "mcorr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 584,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mask = np.zeros_like(mcorr, dtype=bool)\n",
    "mask[np.triu_indices_from(mask)] = True\n",
    "cmap = sns.diverging_palette(220, 10, as_cmap=True)\n",
    "g = sns.heatmap(mcorr, mask=mask, cmap=cmap, square=True, annot=True,fmt='0.2f')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多重共线性检验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 586,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5.214665281316713,\n",
       " 13.95043729748714,\n",
       " 14.070702420105798,\n",
       " 4.83741001657474,\n",
       " 6.824418986390695,\n",
       " 4.816473527530741,\n",
       " 7.513533629968771,\n",
       " 4.546488612047156,\n",
       " 2.5471888419289157]"
      ]
     },
     "execution_count": 586,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vif = [variance_inflation_factor(X.values, X.columns.get_loc(i)) for i in X.columns]\n",
    "vif"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 587,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ClumpThickness</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>Mitoses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ClumpThickness  CellSize  MarginalAdhesion  SECellSize  BareNuclei  \\\n",
       "0               5         1                 1           2           1   \n",
       "1               5         4                 5           7          10   \n",
       "2               3         1                 1           2           2   \n",
       "\n",
       "   BlandChromatin  NormalNucleoli  Mitoses  \n",
       "0               3               1        1  \n",
       "1               3               2        1  \n",
       "2               3               1        1  "
      ]
     },
     "execution_count": 587,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X2 = X.drop(['CellShape'], axis=1)\n",
    "X2.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 588,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5.10616710481715,\n",
       " 8.093042353122186,\n",
       " 4.8358888284407575,\n",
       " 6.7976442575875,\n",
       " 4.66755058196903,\n",
       " 7.496311870196909,\n",
       " 4.451391778564982,\n",
       " 2.5471879597717946]"
      ]
     },
     "execution_count": 588,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vif2 = [variance_inflation_factor(X2.values, X2.columns.get_loc(i)) for i in X2.columns]\n",
    "vif2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 通过VIF检验，CellSize、CellShape的VIF均大于10，可以尝试删除这两个属性之一\n",
    "- 不删除和删除都训练一下，看哪个效果好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 591,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 标准化\n",
    "def standardization(X1):\n",
    "    X_std = X1.copy()\n",
    "    for col_name in X_std.columns:\n",
    "        std_col = (X_std[col_name] - X_std[col_name].mean()) / X_std[col_name].std()\n",
    "        X_std = X_std.drop([col_name], axis=1)\n",
    "        X_std.insert(0, col_name, std_col)\n",
    "    return X_std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 592,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Mitoses</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>CellShape</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>ClumpThickness</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.343666</td>\n",
       "      <td>-0.611387</td>\n",
       "      <td>-0.179534</td>\n",
       "      <td>-0.686488</td>\n",
       "      <td>-0.549168</td>\n",
       "      <td>-0.632794</td>\n",
       "      <td>-0.742767</td>\n",
       "      <td>-0.699494</td>\n",
       "      <td>0.206788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.343666</td>\n",
       "      <td>-0.283909</td>\n",
       "      <td>-0.179534</td>\n",
       "      <td>1.798376</td>\n",
       "      <td>1.708882</td>\n",
       "      <td>0.768071</td>\n",
       "      <td>0.266684</td>\n",
       "      <td>0.283642</td>\n",
       "      <td>0.206788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.343666</td>\n",
       "      <td>-0.611387</td>\n",
       "      <td>-0.179534</td>\n",
       "      <td>-0.410392</td>\n",
       "      <td>-0.549168</td>\n",
       "      <td>-0.632794</td>\n",
       "      <td>-0.742767</td>\n",
       "      <td>-0.699494</td>\n",
       "      <td>-0.503505</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Mitoses  NormalNucleoli  BlandChromatin  BareNuclei  SECellSize  \\\n",
       "0 -0.343666       -0.611387       -0.179534   -0.686488   -0.549168   \n",
       "1 -0.343666       -0.283909       -0.179534    1.798376    1.708882   \n",
       "2 -0.343666       -0.611387       -0.179534   -0.410392   -0.549168   \n",
       "\n",
       "   MarginalAdhesion  CellShape  CellSize  ClumpThickness  \n",
       "0         -0.632794  -0.742767 -0.699494        0.206788  \n",
       "1          0.768071   0.266684  0.283642        0.206788  \n",
       "2         -0.632794  -0.742767 -0.699494       -0.503505  "
      ]
     },
     "execution_count": 592,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_std_1 = standardization(X)\n",
    "X_std_1.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 593,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_std_2 = standardization(X2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 595,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义评估函数，输出分类器性能指标\n",
    "def evaluate(clf, X_test, y_test, y_pred):\n",
    "    cross_accuracy = cross_val_score(clf, X_test, y_test, cv=5)\n",
    "    precision = metrics.precision_score(y_test, y_pred)\n",
    "    recall = metrics.recall_score(y_test, y_pred)\n",
    "    F1 = metrics.f1_score(y_test, y_pred)\n",
    "    print(\"accuracy: {}, avg_accur: {}, precision: {}, recall: {}, F1: {}\".format(cross_accuracy, np.mean(cross_accuracy), precision, recall, F1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 划分训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 597,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)\n",
    "X2_train, X2_test, y2_train, y2_test = train_test_split(X2, y, test_size=0.25, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 598,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(524, 175)"
      ]
     },
     "execution_count": 598,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(X_train), len(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 599,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_std = standardization(X_train)\n",
    "X_test_std = standardization(X_test)\n",
    "X2_train_std = standardization(X2_train)\n",
    "X2_test_std = standardization(X2_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 600,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Mitoses</th>\n",
       "      <th>NormalNucleoli</th>\n",
       "      <th>BlandChromatin</th>\n",
       "      <th>BareNuclei</th>\n",
       "      <th>SECellSize</th>\n",
       "      <th>MarginalAdhesion</th>\n",
       "      <th>CellSize</th>\n",
       "      <th>ClumpThickness</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "      <td>5.240000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.474985e-17</td>\n",
       "      <td>-8.135986e-17</td>\n",
       "      <td>-3.050995e-17</td>\n",
       "      <td>3.898493e-17</td>\n",
       "      <td>-7.288487e-17</td>\n",
       "      <td>8.135986e-17</td>\n",
       "      <td>-4.406992e-17</td>\n",
       "      <td>6.101989e-17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>1.000000e+00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Mitoses  NormalNucleoli  BlandChromatin    BareNuclei  \\\n",
       "count  5.240000e+02    5.240000e+02    5.240000e+02  5.240000e+02   \n",
       "mean   8.474985e-17   -8.135986e-17   -3.050995e-17  3.898493e-17   \n",
       "std    1.000000e+00    1.000000e+00    1.000000e+00  1.000000e+00   \n",
       "\n",
       "         SECellSize  MarginalAdhesion      CellSize  ClumpThickness  \n",
       "count  5.240000e+02      5.240000e+02  5.240000e+02    5.240000e+02  \n",
       "mean  -7.288487e-17      8.135986e-17 -4.406992e-17    6.101989e-17  \n",
       "std    1.000000e+00      1.000000e+00  1.000000e+00    1.000000e+00  "
      ]
     },
     "execution_count": 600,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X2_train_std.describe().head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 不删除共线属性的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 603,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-11 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-11 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-11 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-11 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-11 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-11 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-11 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-11 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-11 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-11 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-11 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-11 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-11 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-11 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-11 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-11 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-11 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-11 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-11\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(max_iter=10000, random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" checked><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(max_iter=10000, random_state=42)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(max_iter=10000, random_state=42)"
      ]
     },
     "execution_count": 603,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg = LogisticRegression(random_state=42, max_iter=10000, penalty='l2')\n",
    "log_reg.fit(X_train_std, y_train)"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe0AAABDCAYAAACx1V3RAAAgAElEQVR4Ae3dBbR9RfUHcOzuABO7EQOxE7sVW1FQMRFBVAwwEEws7O4O7G7FwO5CMVBR7O7zX5+z3Pc/b96ce8+Nc9+77zd7rfPOfffOmfjOnr337NkzZ7umUkWgIlARqAhUBCoCK4HAditRy1rJikBFoCJQEagIVASaqrQrE1QEKgIVgYpARWBFEKhKe0U6qlazIlARqAhUBCoCVWlXHqgIVAQqAhWBisCKIFCV9op0VK1mRaAiUBGoCFQEqtKuPFARqAhUBCoCFYEVQaAq7RXpqFrNikBFoCJQEagIVKVdeaAiUBGoCFQEKgIrgkBV2ivSUbWaFYGKQEWgIlARqEq78kBFoCJQEagIVARWBIGqtFeko2o1KwIVgYpARWB1Efj973/ffPOb32y+//3vN//6179mbkhV2jNDVx+sCFQEKgIVgYrAeAS+/e1vNze+8Y2bU5ziFM3pTne65rSnPW17v/e97938/Oc/H/9w4deqtAug1K8qAhWBikAXAkcffXSzww47NLe97W27ktTvKwItAl/60peaU5/61M12223XnOhEJ2pOcpKTtErb/yc96UmbM53pTO3sexq4qtKeBq2atiJQEdjmEPjEJz7RvP71r28OPfTQZuedd25OdapTtUL4whe+8DaHRW3wdAic73zna3nlkpe8ZPODH/yg+ctf/tK8+MUvHvEQ5c0A/M9//tM746q0e0NVE1YEKgLbIgI77rjjaKZktkTQurYVpf33v/+9+d3vfreu6//xj380J5xwQvPPf/5z3W/1i6b52Mc+1s6qT3nKU7az6s9+9rMjWJ7whCeMFDd3+ZFHHjn6bdKHqrQnIVR/rwhUBLZpBG5yk5s0ZznLWZorX/nKzclOdrLmxCc+8TajtF/xile0bl1GilnjV7/61eY73/lOc7vb3W5kvFirvfOd79z8+c9/3qb5JG/8c57znIbCDiPvHve4xyjJT37ykzW/7b777qPfJn1YGaWNWW5605s2D3nIQya1aa7fMekNb3jD5pOf/ORc+dSHKwL//e9/m0MOOaTl209/+tODAfKrX/2q2WuvvRqBLX/9618HK6dm3DSPf/zjB1Ha3/3ud5s73vGOza1udauGkXCjG91odJFHrhvc4AaDXORqaSZtZhgK5+QnP/noc3znTikxZCjuO9zhDpVFEgTe/va3N6c5zWla3OBz8MEHj34lG1Icd9ttt9Fvkz6shNIW+MGFoJFcVUPSVa961bYc61ZvetObhiyq5j0FAuPWfPw2zxaKKarRO6lBafZhsOLb1772tb2fnTbh1772tbYMgS077bRTY2tJpWEQGEppU9SpEF/mZwr5ec973jrArn/967d1evjDH96c/exnbz+Hl8GskYH429/+djQTx3/jxum6AjbpF9z+i6L999+/udCFLtTc/va3X2NQ//CHPxwFqOnrPffcs3eRgyht+9A++tGPNkcddVTzhS98ofniF7/YiKL78pe/vOYy+zjmmGPGVtZzobDPfOYzNz/96U/Hps9//PWvf9085jGPaXbZZZc2H5F8FP8BBxzQcFHkJP25z33ulhEpbgEoW50+97nPNR/+8IfXXO95z3va/z/+8Y83P/vZz2aGwCxQ3h/5yEfW5B/l+b5E//73v5s3v/nNzWUuc5l2PQhji7w85znP2TzpSU8azQwIDa5LWyk8E8SFt+jL+l1fItTwmpnIAx7wgL6PjdLB5U53ulNzrnOdq137OsMZztBc/epXb5V/STAKblGeWc/FLnaxVpiOMqsfFobAUEr7BS94wWhWlips/Xnxi1987KW/L3rRi7Zr7BQEN/b222/fjgmKlOF4+tOffo07Ni3DZ4FSKf3pT38ajTtyUj2kw2PkaZDxF7NwCj0dg5FmFe4M3bvf/e7NGc94xlb2G7f77bdfA4chSFBjBDSajdOVfWnhStuMB4O4CBpX/J/fCVod3UU//vGP2+cxiwZO42IUpffoRz+6ZbKY7aSMigmB9brXvW5d8aygcGso91vf+ta6NFvpi7Oe9aztgI7+codV/I+BjzvuuKmbbACHhR555Xfl5MToYziFsZb2m8/6RJ0IUO5EQgMfhYXsLh3+WtQlvwc+8IF5VYv/P/KRj2z5Tp0YiyUlW3ywaVoD90pXutKI//K240t5MoZyevCDHzxS3FyplRaPwFBKW025wEMBRr+f4xznaP74xz/O1RDGponTU57ylJZ3yEPKPMpwN6a46IOOP/749vfLXe5yzYc+9KFWhktHVqSKWWQ9ue4391Wk97///a3hD3u4RHtgcv7zn7+N+F5kuyxFhGxT5jSucfVYLzHnrB3hLsJSg10EV8oc8ZnS9PtFLnKR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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 岭回归 Rigde Regression\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 605,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred_log_reg = log_reg.predict(X_test_std)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 606,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: [0.97142857 0.97142857 1.         0.88571429 0.97142857], avg_accur: 0.96, precision: 0.9636363636363636, recall: 0.9298245614035088, F1: 0.9464285714285714\n"
     ]
    }
   ],
   "source": [
    "evaluate(log_reg, X_test, y_test, y_pred_log_reg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 删除共线属性的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 608,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-12 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-12 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-12 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-12 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-12 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-12 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-12 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-12 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-12 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-12 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-12 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-12 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-12 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-12 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-12 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-12 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-12 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-12 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-12\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression(max_iter=10000, random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" checked><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression(max_iter=10000, random_state=42)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression(max_iter=10000, random_state=42)"
      ]
     },
     "execution_count": 608,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "log_reg_2 = LogisticRegression(random_state=42, max_iter=10000, penalty='l2')\n",
    "log_reg_2.fit(X2_train_std, y2_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 609,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred_log_reg_2 = log_reg_2.predict(X2_test_std)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 610,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: [0.97142857 0.97142857 1.         0.94285714 0.97142857], avg_accur: 0.9714285714285715, precision: 0.9636363636363636, recall: 0.9298245614035088, F1: 0.9464285714285714\n"
     ]
    }
   ],
   "source": [
    "evaluate(log_reg_2, X2_test_std, y2_test, y_pred_log_reg_2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 绘制ROC曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 612,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2_scores = cross_val_predict(log_reg_2, X2_train_std, y2_train, cv=5,\n",
    "                             method=\"decision_function\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 613,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fpr, tpr, thresholds = roc_curve(y2_train, y2_scores)\n",
    "def plot_roc_curve(fpr, tpr, label=None):\n",
    "    plt.plot(fpr, tpr, linewidth=2, label=label)\n",
    "    plt.plot([0, 1], [0, 1], 'k--') # dashed diagonal\n",
    "    plt.axis([-0.01, 1, 0, 1.02])                                    # Not shown in the book\n",
    "    plt.xlabel('False Positive Rate (Fall-Out)', fontsize=16) # Not shown\n",
    "    plt.ylabel('True Positive Rate (Recall)', fontsize=16)    # Not shown\n",
    "    plt.grid(True)                                            # Not shown\n",
    "\n",
    "plt.figure(figsize=(4, 3))                         # Not shown\n",
    "plot_roc_curve(fpr, tpr)                      # Not shown\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 614,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9925351662404093"
      ]
     },
     "execution_count": 614,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "roc_auc_score(y2_train, y2_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 调整阈值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 616,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2_scores = cross_val_predict(log_reg_2, X2_train_std, y2_train, cv=5,\n",
    "                             method=\"predict_proba\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 617,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2_scores = [x[1] for x in y2_scores]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 618,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "precisions, recalls, thresholds = precision_recall_curve(y2_train, y2_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 619,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgsAAAEqCAYAAACbRxPAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABbUklEQVR4nO3dd3wUdfrA8c9sSbLppJBCgEBI6JBQpAgiIKgICIKgiMrdYUNFsfzUs5zC4d3ZDyuop6KoHIjIqYB0kA7SQw0QSkJJ78mW+f2xZJMlIclCsptNnvfrlRezs1O++5DsPPNto6iqqiKEEEIIcQUaVxdACCGEEPWbJAtCCCGEqJIkC0IIIYSokiQLQgghhKiSJAtCCCGEqJIkC0IIIYSokiQLQgghhKiSJAtCCCGEqJIkC0IIIYSokiQLQgghhKiSztUFqE5GRi4Wi6tL0TgoCgQH+5GenotMAu4cEnPnk5g7n8Tc+TQaCAryq7Xj1ftkQVWRXy4nk5g7n8Tc+STmzicxd57ajrM0QwghhBCiSledLGRkZDBkyBC2bt16xW3WrVvHiBEjiI+P59Zbb2XNmjVXezohhBBCuMhVJQs7d+5k/PjxnDp16orbnDx5kscff5wnnniCHTt28Pjjj/Pkk09y/vz5qy6sEEIIIZzP4WThxx9/5JlnnmHatGnVbtejRw9uuukmdDodw4YNo2fPnsyfP/+qCyuEEEII53O4g2O/fv0YMWIEOp2uyoTh2LFjxMXF2a1r06YNhw4dcuh8dyweQb4x39Fi2nhpDTzR/WlubD7oqo8hhBBC1HfHjinMmOFJu3YWXnyxpFaP7XCyEBoaWqPt8vPzMRgMduu8vLwoKChw6Hy7LvxBbkmuQ/tcbm/aHtbftZkov+bXdJyGTlHs/xV1T2LufBJz55OYO8f773uydKkek8lEcXHtHrvOhk4aDAaKiors1hUVFeHj41NXp7yi3JIcpq59mMndJtf5uRQUWgS0oHNYZ4IMQXV+vroQHFx7Y3NFzUjMnU9i7nwS87qVl2f9d8UKHR4etRvrOksW4uLiOHDggN26Y8eO0alTJ4eOc/Khs1c9KVN2cRYDvu/L2bwzbDi1gQ2nNlzdga5ShE8k7YM70CG4Ix2CO9I+uCOxTeLw1Ho6tRw1JROnOJ/E3Pkk5s4nMXeOkhIDpZf1zMw8QkJ8a+3YdZYsjBw5ki+++IJff/2VoUOH8ttvv7Ft2zZefPFFh45zLZN4+HsE8u9BHzHuf6OwqM6fBjI1P4XU/BRWn1ppW6fT6GgTGEv7oA60v5RAdAjuSJRvc5R6UkcnE6c4n8Tc+STmzicxrzvHjyssX152Sa/tONdqspCQkMBrr73GyJEjiYmJ4cMPP+Stt97ixRdfpFmzZrz//vu0atWqNk9ZrRuibmTpHavYfXGXU85nshhJyjpGYvoBDmYkkl2cddn7Jg5lHORQxkF+PPaDbb2n1hOtYv3v8PXw5bW+MxkTN84pZRZCCOG+LBYYPdrbbl1t33sqqlq/87z0dPd9NoSqqqTmp5CYvp/E9EQOXkogjmYexmgxVrlvS/9otk/c66SSWikKhIT4kZYmVYXOIjF3Pom580nM61Z2NsTGlvVR0GpVjh/Po0WLRvRsCHemKAqRvs2I9G3GTS1vtq03mo0cyzrKwYwDHExPJDF9P2dyzwAqp3JPkW/MIznnJK9uegkFx9PDYEMIY2LvJMI3shY/jRBCCFd55x0PfvtNR1iYhVatVKKjLbRqZaF7dzOFhfbXienTi6ntsQRSs1DPPLn6Ub499PU1H0en0TGi9e1M7vIwPcKuq1F/CMn+nU9i7nwSc+eTmF+bgwc1DBhQ+dV/+fJ8goNVbrnFm8JChWHDTHz4YREaTe2OPpGahXpmZJvRtZIsmCwmfjz2Az8e+4GEpt2Y3PlhrovoXWVNhaJAns6XjJy8OvuD1ml0RPhE1pvOnEIIUd+tW6e94nvR0RaaNIHExKufvLAmJFmoZwa1uIld9yZyOvfKz92oiorKutOrmZv4BWmFaYB1YqtHVz1Ym8W8JiGGUG6IupEBUQO5IepGmvlFubpIQghRL23ZouWLLzxsr+fPL0CrhRMnNKSkKDRp4pxySDNEA1VkKmLxsR+Ys/dj9qc5t6Oko2IC21xKHgZxfbN+BHgGurpITiPVs84nMXc+ifnVmzXLg7//3To3T2iohf3782s00kGaIUSNeOm8uKvdPYxvO4Gt57bww5H/knPZMM4KFPD01FNcbIQ6+oPOLslma+oW8o15tnVJWcdIyjrGF/s/Q6No6BoaT5BXcJXHCfAM4K52ExkQNVCaNIQQbi03F44e1RARoRIaqqIrd2U+fbrs+238eKPLpsyWmgVh46zs32g28seFnaw/s4b1Z9ay8/x2TBbTVR2ra2gCT3R7mmGth6NRruqJ6y4ld1zOJzF3PmfFPDsb0tIUPDy49KPalnW6+vlsitxc6N3bh4sXy76/goIstGtn4bXXiomMVDl+XIOqQvfuZvT6mh23tmsWJFkQNq76Es0ryWVzykbWXUoeDmUcdPgYcU3a8ljCk4yJHYdeW8O/pnpALlzOJzF3vtqOeVYWHDqkpUMHM/7+Zeu//VbHk08aKt1HUcoSB09Ple3b8+2GF86dq2fBAp1tG71exdMT9Hrr9tZ/oVUrC3/+s/08Ob/8oiM7mwpJisEAPj4qPj4qvr7g769y2fMVWblSy4QJ9hMqlZo3r4AhQ8xXEyJphhANj6+HH0Oib2FI9C0A5BnzMJmvPGmVisrvZ9fz3s632Ze2B4AjmYeZuvoR3tj2Oo8mTGVC+/sw6Cr/0hBCuIf8fGv1/KFDGg4e1HLokHU5NdV6F/799wUMGlR2MW3X7sp3lqqqUFwMxcWQm6tUuENPTlbYurX6S2LfvqYKycI773iwb9+VRyyUevbZYp591v7R0QsX2hckKsrCmTPWz+dXj567JcmCqHd89b5QTeXAiJhRDG99O2tOr+Lff7zN5pSNAJzJO80LG57l7R1v8HDXR5nU8S/4ewY4odRCiMoUFcGaNTqWL4fDh70JCLDepev11rvv5s0tvPii/QX0oYe82LVLS3Kygqpeue3g4EGNXbIQF2dh7FgjRqM1KTAaFUpKuPRjv3x5slBSUrM2isqaAUpKKq6rjI+PfbVKZiYsWlR2wCVLCujd20xxMZw6pSEysv5Uq0szhLBx5+rZralbmPXH26xIXm633s/Dn2ndn+WhLlPqZfOEO8fcXUnMnWP7dg1ffunBsmU6cnOvfCHu2NHMmjUFdusGD/a+4p16QIBK+/Zm2rWzMHy4iRtuuLpq+supKphMVEgurImHYktAfHygQwf7i9LPP+vIyLBPRoqLoahIIT8f8vKs/06caLRrVnjhBU8+/9w6LNLPT+WPP/IIqKV7G2mGEKISvSJ6M++2BexL28v7f7zDkqTFWFQLuSU5TN/8MguPzOedG2fRLayHq4sqRL2yerWWPXu0aLUQHm5h3DhThffT0xU0GusFSKu1JlylrzUaFY3G2pbfpk1Z9rVvn5YFC6pP0D08Kq5r185CUpKGtm2tHf3atbMmB+3bWwgLU+uko6KicKnGg0t9GcpnklVnlcOHX10H7SFDTERFWSgoUBg82FRriUJdkJoFYdOQ7riOZx1j1h/v8t2hb1Av/aErKExofy+tAloDoNd4EOYTRrh3BOG+EYR7R+Ctr7yjUV2przHfts3aLqwo2H40mtJ/VdvryEi1wl3W5s1azOay7cv2V+2OUzrzXKmCAkhO1tidp/TipNVae7Nbl1UCA63HuRr1NeausHGj1u5phZ07m1m1yv4uf+RIA1u2VH9f+eSTxfz1r2X18RcvKnTu7IOPDwwbZuL++/V07Jhru/MuvYvXaiEqyv4/Ii8PvL2v/v9YSM2CEDXSOrAN7w36kPs7/pmn1k7lQPo+VFTmHZxb5X4BnoGEe4cT7hNBuE8EET6RhPmEE+ETSfilf0O9m6LTNOw/nTlzPFiypPq7wrvvNvLvfxfZrZs40VBltXPZOQoZNarsjiwxUcOwYTV7+s3hw7l2icbbb3vw5pselyUV1sSiLPmArl0tzJtXaHeshx/2Yv/+siRFqy1/11y27913G5k4saxjW2Eh/OlPhgp32JX9PP10MTExZRfEvXs1fPutHg8P8PJSL/XQL79sHWvv6QkjRtjftSYmakhNVezKWlbmsjI0aaLSqpX9RfjkSQWLxfq+TgczZ3ravV/ZXb7ZXLPb+Msv7KGhKosXFxIfb8ZggJAQPWlpXBoNUHWW5utbo1MKJ2rY33ii0UsI686KO9cxe89HvLn9dQpMBVVun12cRXZxFoczD11xG42iIdTQ9FIyEUHYpX/LJxZNvcPwqEEfCUUBj2KV3BLX3eWeOKFgMik0D/MhJNh6EappWTSaihvWfN+r2w+wm7QGrG3NFov1Qmi066huf6FLT694kuRkDUeOVN+TfcAA+4u2yQSrV9fsK/RPfyqxSxZOnNDwn/9UcmW+jK+vyogReXbr5szR8+231e87YoSRzz+3T+Ruv93bNpKgvOhoC3/7WzH+/hXj88gjJdxxh4KqgtkMFkvpj3Vd6etevSr2Hejdu3b6EwjXk2RBNHg6jY5HE6Yyru3d/HFhBxbVWm1eZCrkXP45UvNTOJ+fSmp+Kucu/RSZi654PItq4XzBOc4XnGPPxV3O+hh1z6wnKiCCSN9INAOi6Nu9GX40w19thq8lCj+1GT5qOIqqw2KxXtw7dap4MXjkkRKKi7m0jWLbtvSn9HWrVvbNF8HBKvfcU3JpG6XcRcl6YTabrT8mU8We7OHhKgkJ5grble5feqELDa3YpuntreLnp9qdr/xPaW/8y5MbR5pHr3ZfbSU5jMVSszv9yvetfNvHHivhttsqb3e/2vZ40bBInwVhI225Vqqqkl2cZZc8pOan2JbPXUosLhZesCUejYVG0RDmHW6tSfFtRqRPpPVf30gifZoR4RtJuE8EnlrP6g/mIo7+npcmOWB/0VdVyMkpu8s2m7G70y5/Fx4ZqeLlVbZvVhacPKmhuLhs7H/55aIia6Kj08GkSfZj+pcu1XHggMZ2vtLzmM2KXWLUubOZu++2v9D/9a+eZGWV1cBkZip06mThlVeKK9TW1Cb5bnE+mcFR1JnG9Af97rsefPWVHovl8s571vfLr5szp5AuXcp+Cdeu1fK3v3miaE2Yvc5j9jmLyZCKyfssRq8UTIYUjJ7n0WgtxMfb33kfOKDl4oXq7wzDwq3Dw8r7/XctJmP1+7ZrZyE8oqy8eXkKO7aXu8281Nat06podaDTgk5vwS/8ArnKWTKKMqo9R3VCDKFE+jYjwieClv7RtAmMI65JW+KC2hFiCLnm41+LxvR7Xl9IzJ1POjgKUQtuucXEe+95UFhY/cW3uNj+dXa2wsGDWkALtLj0U5Gfn8p/k+zbm59c5Vmj9uZutxr56v/sm0Ju+rc3WVmKbepYPz8VX9/SH2zLg/ubad++LFkoLoazvRR8fKzbeHtXPUd+oamQ1PwUUvNSSM1PISUvhdT8s9Z/886Skp/CxYILtlEmlUkrvEha4UX2Xtxd4b0gryBb8hDbpC1xTeKIbdKWKL/mbvl8DyEaA0kWRL2nqtYpXzdu1NKjh5nOnS1277Vo4WvrQe7pyWU9zK3rPD3h+eeLbTUE7dtbeP75YmbP9qjQlm7fvl6xfVyjAYNBtdun7N+yq3DpuvIX5h49LBQVGe3mig8L8wSK8PW1tp37+EBYWMXqtJUrq+6ceSWentC6dc1v5ww6A60DYmgdEHPFbUrMJZwvOGeXQJQmGCl5Z23NNma1Yp+GjKIMtp3bwrZzW+zWe+u8iQmMJbZJWSKR0LQbUX7Na/5hhRB1QpohhI0zqgrLj7+/ElWFpCSF33/XsWmTlo0btbYnsk2dWsxLL5WN5S4uhubNa1bV9sMPBfTvX/e9s0sTjZqMEW/I1bNmi5kLBedJyj7GkczDHM08zJHMIxzNPMy5/NQaH6d3RF/Gt53AyDaj8PPwr36HajTkmNdXEnPnk2YIUW8VF1uHoaWmKqSmKqSkaEhJUTh3zvpvaqpCerr1Crp3bx7h4WXfGp9/rufttz3Q663Hycio/Eq7caMOKEsWTCZrj/zyHcTKplq1v9P39HTOt1TpJESNnVajJcI3kgjfSPo1u8HuvZzibI5mHeFo5pFyicRhknNOVug0uiV1E1tSN/HChmcY1no449pOYEDUQLSa6oc7CiFqhyQLolqqau29nZKisSUBqakKw4aZ7JoEdu/WMmJEzWZAvHxYV16eQlpa5QmCr69K795mrr/eVKFmwMcHVq++cvW8yWRNGkpKZKKX+sTfM4DuYT3pHtbTbn2RqYjj2UkczTzMwfQD/C/pJ45mHbG+Zy5i0dGFLDq6kHCfCIa0vIUbmw+kX7MbaOIV5IqPIUSjIcmCqOC773QcPKjl2DENx49bawUq6wjYtKlqlyxU9YQ0nU4lIkKlaVPrlL+X3+X7+qq0aGHBZLImJ+3bW7j+emuC0KWL5aqHdel0kiS4Ey+dFx2CO9IhuCO3t7mD5657id0X/mD+4W/58ehCMoszATiXn8rXiV/wdeIXKCh0DY3nhqiBDGg+kJ7hvfDSeVVzJiGEI6TPQiNTXGwd3330qIakJA1+fqrt2eyl7YqxsWaOHau+ivfyueCNRpg61YtmzSxERFiTg8hI63JoqCrzvFdC2nJrrthczMrk35h/+FtWJf+G0WKsdDuDzkCviD70j7qRjsEdaekfTZRfC9vcDxJz55OYO5/MsyBqZPVqLa+95nlpdID1+fFnz2o4dUqxa8fv0MHM2rXWavzSP+hhw4wsXWodAuDtrdK8ucV24Q8PV4mMtC63bWuhefN6/etT78mX6NXJN+azNXUTa0+vYf2ZtSSm769yewWFCJ9IWgZE09I/mg7hbQnRhdPCrxUtA6JpamiKIh1N6oz8njufJAsCsNYQbNqkZcUKHStX6vjllwJCQ8v+Kxcu1DFliqHa43h5qZw8mWcboRAS4sfSpfnk5yvExlqTBPkOrTvyJVo7LhRcYMOZtaw/s5Z1p9eQkn/Wof0NOgMt/aNp4deSlv7WhKJlQCvbOmc/jbShkd9z55PREI2UxQIHD1rnGvj9dy0bNujIzy+7iq9apeWuu8qmdlVVa61AYWHZ3Pbe3ipt2lho08ZCTIyF2Fjrv5fr2dMif9DCrTT1bsqYuHGMiRuHqqokZR1ja+pmknNOkpxz4tK/J0kvSq90/0JTIYcyDnIo42Cl74cYQojybU6UXwui/JoT5RtFlF8Lmvs1J8qvOYGeTaRmQjRokizUc/Pm6Vm5UsvmzdorDifU6VTOnLF/7847Tdx5Zx6qah0RUFxsHTkg32eioVMUhTZNYmnTJLbCe3kluZzKTSaT8+w7c5CT2WWJxOncUxSbiys5IqQVppFWmMbuKzw4zEfveymBaG5LIpqVSyjCvMNlqKdwa9IMUc+NHWtg/fqKOV1wsIXBg83cfLOJAQNM+F/7XDVSVegCEnPnu1LMLaqF8/nnSM45yclLtRGncpI5mXOCM7mnOZefWuUU11XRaXRE+kbZEopBLW7ijtg7a+kT1X/ye+580gxRz5VO8VvZ42GrsmWLls8/1/Pxx0V2wwT79TOzfr2OgACVPn1M9Otnpm9fMx06WGR0gRC1SKNobJNI9Y7sW+H9EnMJqfkpnMk9zencU5zJPW39yTvDmdxTnM07c8WaCZPFxKmck5zKOQnAfw9/R6ihKf2jBtTlRxKi1kiyUEuMRnj7bQ/mzPGgoADOnbN/gND06R58840HWq2KVnvpqX86a/an1cKJEwqqqtC5s4WpU8uGI44bZ2TQIBMdO1ocTkCEELXHQ+th6/xYGYtq4WLhRWvikHuG07mnOZN36lJycZqzeWfILs6ybT/rj3ckWRBuQ5KFWpCcrPDwwwZ27rRezT08Ktaz5ecrZGUpQNWdBtas0fLYY2XPFbAOU5R6OyHqO42iIcw7jDDvsAozU5bKKc5m8IL+JOecZN2ZNTy//mme6PY0Eb6RTi6tEI6RiuxrdPiwhkGDfGyJAmA3q2Gp4GCV1q0ttGxpISrKQkSEhdBQC8HBFgICrHMZvPZaEQsXFkrzghANlL9nAI8lPGl7/Z/9n9Lzmy48t/4pzuaecV3BhKiGdHC8Ro8/7sX8+dYJjFq2tDB7diHdutXjAldBOiE5n8Tc+Vwdc1VVeXP7P/ho9ywKTGXPNfHQeDCp0194qfdrDW66alfHvDGq7Q6ODt/DpqenM2XKFHr06EGvXr2YOXMmJpOp0m0XLVrELbfcQkJCAuPHj2f79u3XXOD6JC/POr8BWOcwWLUq320TBSGEcyiKwv9d91d23LufxxOm4a3zAaDEUsKcvR8z+qdhDj3CWwhncDhZePLJJ/H29mbDhg0sXLiQzZs38+WXX1bYbtWqVfztb3/jueeeY8eOHfzlL3/hgQce4Pjx47VRbpfLy4N77jHYnpRYW8MXhRCNQ4ghhJf7vMbOe/fzRLenMeisM67uPL+DoQtvZPnJpaTkna3wyG4hXMGhZojk5GSGDh3K+vXrCQsLA+DXX3/lzTffZM2aNXbbTps2DS8vL/7xj3/Y1k2ePJm2bdvy7LPP1riA9bEZwmi0zn+webO1f2hAgMqSJQW0b1/PCuogqSp0Pom589XXmO9L28v9v97NmbzTduu9tF608G9Jq4DWRPu3IjqgFdH+rWgV0JoovxZ4aD1cVOKaq68xb8hcOs/C0aNHCQwMtCUKADExMaSkpJCTk4N/uVtrs9mMt7f9fOoajcbhmgVFqX+zDnp4wNChJjZvts5/8MMPBXTo4N6JApTFub7FuyGTmDtffY15l9Au/HbnWv60bCJbUzfb1heZiziSeZgjmYcr7KNRNET5Nic6oJV9MnEpofD1qB/PZ6+vMW/IajvWDiUL+fn5GAz2DycqfV1QUGCXLNx888288sor3HzzzXTr1o21a9eyefNmevasfEjRlQQF1V5mVJtefRWCgqBvX4UePXxcXZxaVZvZqKgZibnz1ceYh+DH+r+s5fv93/NH6h8kZSaRlJHE8czjlU74ZFEtnMpN5lRuMuvPrK3wfqRfJLfF3sb4juMZED0Anca1o+XrY8xFzTj0m+Pt7U1hYaHdutLXPj72F8zbbruNjIwMXn75ZbKzsxkwYADDhw+vsH91MjLqRzNEXh74XpakT5hg/TctzfnlqQuKYv1jTk+XqkJnkZg7nzvEfFiz0QxrNtr22qJaSM1L4WTOCU5kn+Bk9olLy8c5mX2CnJLsSo+TkpvCp398yqd/fEqIIYThrW/n9jaj6RN5vVOfVeEOMW9oNJravdl2KFmIjY0lKyuLtLQ0QkJCAEhKSiI8PBw/P/tCXbx4kf79+3Pvvffa1o0bN46hQ4c6VEBVxeW/XBcvKgwa5M3rrxczYkTlIz8akvoQ88ZGYu587hRzBQ2RvlFE+kbRN7K/3XuqqpJZnMHJ7EvJQ05ZMrHv4h7b8My0wjS+PPA5Xx74nFBDU4bHjOSp7v9HmE+40z6HO8Xc3dV2nB1KFqKjo+nevTuvv/4606dPJzMzk48++oixY8dW2Hb79u384x//4PvvvyckJITvvvuOEydOMHr06EqOXL99952e8+c1PPqoF5GRBXTvXg+qOoQQAutQzCCvYIK8gukW1sPuvQJjASuTl/NT0o+sTF5Ooclas3ux8AJf7P+MNadWsf6urQ1uXgdR+xweOjlr1ixMJhODBw9m3Lhx9O/fnylTpgCQkJDAkiVLABg2bBjjx49n/Pjx9OnTh1WrVvHVV18RHBxcu5+gDpSUwNatWt5+24PRow288Ya1t3FRkSLDI4UQbsNb783INqP5/Oa5HPhTEnOGfMFtrUfipbUmBydzTjBzy6uUmEuqOZJo7GQGx0syM+Gbbzz4/XctW7dqKSio2JW0d28TS5Y41ufCncjwJueTmDufxBwOpicy8L99bXM4eGm9mND+Xh7q+iitAlrX+vkk5s7n8hkcGypVhb//3YM1a3QVEoUWLSxMnFjC++8Xuah0QghRe9oHd2BSx7/YXheZi/jP/k/pPS+BPy+7lx3ntrmwdKI+kqdOXhIUBB07Wti/X0t4uIV+/cz062fi+uvNtGwpqbAQomF5uc90tIqWI5mH2X5uKwWmAlRUfj7+Ez8f/4me4b24sfkgOgZ3pkNwR1r4t0SjyP1lYyXNEOVs26YhKEglJkZtlJOHSFWh80nMnU9iXlFmUQZzD3zBp/s+4ULB+Uq38dH70iG4Ix2CO5X7twN+HtV35JKYO19tN0M0+mRBVWVWsVLyB+18EnPnk5hfWbG5mEVHFvDR7lkczjxUo31a+EfTIbgjHS8lEU28gipsowABAd54Gv1oExiHIl+6dU6ShVqUmKjh6ae9+PTTQqKi6nUYnEK+RJ1PYu58EvPqqarK8exjJKYf4EDaPhLTD5CYfoBTucnXfOx3b/yAezrcVwulFFWRZKGWLF+u5aGHDBQUKHTpYmbJkgIue5RFoyNfos4nMXc+ifnVyynOJjEjkcT0/RxI209i+n4OpidSYMqv8TG6hiaw4s51dVhKAS5+kFRDceCAhgceMFBUZK0KUxTIzVXw9pZvDiGEuBJ/zwB6R/Shd0Qf2zqLauFkzgkS0w5wOPMgRabKR439dPwHTmadZM/FXXx/aB4jY0bjrW/kd2hupNHVLOTlwZAhPiQlWXv1jhhh5IMPirjs+ViNktxxOZ/E3Pkk5s6nKDBr35vMWD/Dts5X78ftbUYzvt099ArvLf0YapnMs3ANVBWeecbLlih07mzmww8lURBCiLr2cI+HaRfU3vY6z5jLvINzGfnjzfSaF8/bO/5FTnHlD8QSrteokoX583UsWqQHwM9P5bPPCvGSKdGFEKLORfpFsv6uLSwZvZx72t+Hr77srvdkzgn+tW0mI368mcyiDBeWUlxJo0oWZs/2sC2/914RrVpJHaQQQjiLoij0jujDuwM/YP+ko3x006fcEDUQBWsTxMGMRO76+Q6yi7MwW8xX9VPPW9bdVqPps3DwoIYBA3wAiI8389tvBdd+0AZG2nKdT2LufBJz56su5oczDjFmyYgrTgjliNYBMUy//nWGRt96zcdyZ9Jn4SodOqRBr7f+lg4bZnJxaYQQQpRqG9SOBSN+oolnk2s+1vHsJCb+Op5HVkwmvTC9FkonoBHVLADs3q3hjTc8mTOnEF/f2jlmQyJ3XM4nMXc+ibnz1TTmiekHeHfHm6Tmp1zVeXJLcjiYkWh7HWIIYdagj7mp5c1XdTx3JpMyiTojX6LOJzF3Pom58zkr5qqq8t/D3/HSxufJLs4CwEPjwaYJO2nh37LuTlwPSTOEEEIIUQlFURjfbgK/37WNwS2GAFBiKeFf22a6uGTuT5IFIYQQDUqYTzifDPmcQM9AABYc+Z67fr6DRUcXUGCUzu1Xo0EnCydPKnzyiZ6EBB/uu8+LKVO8MEnfRiGEaPACPAOZ1v3/bK9Xn1rJwyv+QqcvY3li9RQ2nt2ARZU27ppq0M+GuP9+AwcPagE4e1ZDfLwZXYP+xEIIIUo91HUKFtXCf/bP4XTuKcA6c+R3h77hu0PfEOXbnAe6PMJfOj+Ih9ajmqM1bg26ZiE52f7j3XGH0UUlEUII4WwaRcOjCVPZPnEvi2//lQnt7rWbOfJM3mn+tumv9P/+Opad+FUmdKpCg00WNm/WUlBQ9mCS6dOLeOABSRaEEKKx0Sga+jbrx3uDPmT/pKPMHvIfBrcYYps58kT2ce5behdj/3c7B9L2u7i09VODHDpZXAy9e/tw9qw1F/rb34p49FFJFKojQ8qcT2LufFXFXFVVzGaT3GHWMkWBJk18yMzMr1e/54czDvLvnW+z++Iu2zoFhSHRt/BA54dp5hflwtKV0Wg0aLWOtaHX9tDJBtmCv3On1pYo9Olj4uGHJVEQQlyZyWQkNzeLkpIiVOn0VicyMjRY6tmkOSEEMj1hBoWmArKLszCpZtt7F9NTKMzJwd/DH61G68JSWul0Hvj4+GMw+Ljm/C45ax07daqs+WH4cBNa1/8/CyHqqZKSYjIzL6DRaPDx8UOv90Sj0QBKtfuKmtNqFczmelStcJlmqoXMogwyCtMxqdZhc0ZUMpVcmvlG4etRe3fpjlExm80UFOSRnZ0G4JKEoUEmC6W1CgAtWtSvTFYIUb/k5WWh1eoICgq7lCSIuqDTaTCZ6vf3cbhHJKG+TblQeIGLBRexqGYsmEktTKW9dxCK4poEUq8HT08DmZkXyc/PcUmy0CD/Mp56qoTDh3NZsSKf3r3N1e8ghGiUzGYzJSVF+Pj4SaIgANBqdET4RNI+qAM+eutDhEosJeSU5Li0XIqi4O3tg8lUgtns/AmDGuRfh7UzDXTtaiEgwNWlEULUVxaL9WZCp9O7uCSivtFr9TT1DrO9PpWTTFZRpgtLhK2Toyv6fjTIZEEIIRwj/RNERf4e/hh03gCYVRMnc06QnHMSs8VVUwG77vdUkgUhhBCiEoqiEBPYhkDPJrZ1mUUZHMk8jNHSuEbZNbgOjnv2aFi0SI+Hh8ott5jo3r1+d6gRQghRf+k0Olr6R+Nf7M/Z3DOYVTPF5mJO5STTOiDGZZ0ena3BJQsHD2r4+GPrHN/NmqmSLAghhLgmiqIQ5BWMj96Xo5lHMFmM5JbkcDbvDBE+kfViHoa61uCSBaOxLMvz8Ki/Y3qFEMJd/PHHDqZOfbjS93Q6Hd7ePrRsGc3AgTcxatQYPDxc/1CmmTNfZenSn3nuuZcYMWKUw/t//vlsvvjiU+677888+OAUADy1nkT7R5OUdQwVlbTCi2QVZxJqaEqIIQStpsFdUm0a3CfLyytbNhhcVw4hhGhoDAYD/fvfaLfObDaRm5vL7t272LdvD+vWrebf//4YXQN9xK+vhx+Rvs04m3cWUDFZTKTmp3Ch4AIh3qGEGkLRNcCkocF9oosXy2oWQkOlZkEIIWpLQEAgr7wyo9L3UlNTmDJlMnv27GLRogWMG3e3k0tn76GHHmPixEkEB4dc1f5jxoznpptuJiAgsMJ7od5N8fXw40LBebKKMlFRMasmzuenklGYRgv/aPxcNuNj3XB4NER6ejpTpkyhR48e9OrVi5kzZ2IyVT6M5KuvvmLQoEF069aNESNGsHz58msucHXS0so+UkiIJAtCCOEMERGR3HPPfQCsW7faxaWBkJAQWraMxtfX96r2DwwMpGXLaAIDAyt936Az0NI/mnZB7QnyCrY9wdJoMZKUdYzUvJQG9UAyh2sWnnzyScLCwtiwYQNpaWk88sgjfPnll0yePNluu3Xr1jF79my++eYbWrduzfLly3nyySdZsWIFUVF19ySv8jULkiwIIYTzNGtm/W7PyEgHyvoNvP/+bH74YT6bNm3E29vApEmTGTv2LgDS0i4yd+5/2Lx5I2lpF/H19aNbt+7cf/9faN26TYVzGI1GFi36L8uXL+X06VN4eXnRunUb7rnnPq67rrdtuyv1WVi69Gd++WUJycknyc/PJzQ0lF69+jBx4iSaNi2bhKmyPgulli//lZ9+WsSxY0cxmUxERUVx46DB9L7leko0xYDK+YJznDxzgmcnP0H//gN4+unnmTPnI7Zs2UReXi6RkVEMHz6SO++8G60bPMDIoZqF5ORktm3bxrPPPovBYKB58+ZMmTKFefPmVdj2+PHjqKpq+9Fqtej1+jpvx0pLsyYLGo1KUJAkC0II4SzHjycBEBYWbrf+jTdmsmPHNnr16oOvrx9t2sQBcPToYSZNmsCiRQvQaDT06dOP8PAIVq1aweTJ97N580a74xQU5PPoow/w/vvvkpqaQo8ePYmJacPu3Tt56qnHWLz4hyrLt2DB98yc+SqHDx8kLq4dffr0xWw2s2jRAh544H4yMzOq3N9isfDqqy8yY8YrHDqUSKdOnenduy/p6Wn857M5vPnCTHwtfrZahgJTPmBNiB544H7Wr19DXFxbOnXqwqlTJ/ngg/eYNevtmgfYhRy6ch89epTAwEDCwsqyr5iYGFJSUsjJycHf39+2/rbbbmPRokUMGzYMrVaLoii8+eabhIeHV3boK1IU609NldYsBAer8rRJB5XGuZEMG64XJObOVz7mEvfac+zYUb755isAhgy5xe69tLQ0vvnme8LCIrFYLGg0GkwmEy+99BxZWZlMmfIEd9890TZnwe+/r+fll59j+vSX+fbbH2jSxDop0pw5H5OYuJ/u3Xsyc+abtiaGxMT9TJ36MO+99yYDBgyybV9eSUkJs2d/QEBAAF99NZ+QEGtfBpPJxN/+9gLr1q3hp58WMWnS5Ar7lvrhh/+ycuVyIiOb8e67H9pqUgoK8nn11RfZtOl3vnh/Dn999VVOZh+37XfwYCJdusQzc+abtrL9/vt6nn/+KRYv/oHJkx/Bz6/mfRxq8rtb27/bDiUL+fn5GC4bYlD6uqCgwC5ZMBqNtGvXjpkzZ9KuXTv+97//8eKLLxITE0Pbtm1rfM6gIMc6iWRemrq7aVMNISENq4OJswQHS9ycTWLufMHBfhQVFZGRoUGrVdDprlzR+uGHOj76qPrnR3TtauHbb4vt1k2Y4MmePdVX4k6ZYuTRR8v6f+XmQu/eNRvSNW9eMfHxZXPKLF+u5dgxxe5410KrtZY/OzuLGTNetnvPZDKRknKWQ4cOoqoqN944iBEjRqLRaGwX/xtuGGC7sJZWaK9Zs4azZ89w/fX9uO++++2OeeONN3L77aNZuPC/LF26hPvu+xMlJSX8+usStFodr776dwIDy643Xbp04Y477mTHju2cOnWc0NCetnNrNNb/25ycAoqKiggICCQoKND2/63TefDoo0/Qq1cfOnToaFuv0djvD7BgwXcAvPjiK7Rs2cJ2fn9/P6ZPn8moUbexbt0aHkt7grYRbUk7n2bbZsLD9xIaGmz3GSMjm5GScpazZ5Pp1KlLtf8PFouCRqOhSRMfvLy8qt2+NjmULHh7e1NYWGi3rvS1j4/9IzNnzJhBt27d6NLFGoAxY8bw888/8+OPP/L888/X+JwZGbk48syMAQO8KCpSaNnSQlpacfU7CBtFsX6Bpqfn0oD65dRrEnPnKx/zkpISLBYLZrNa5eOTs7MhNbX6C35kZMXjXLyo1Gjf7Gzs9jWZanZOgMJCi92++fkasrOVWnsktNlsuXSeQpYvX2r3nl6vx98/gOuu68NNNw3llltuw2KxVtmXdvBr1SoGsP9827dvA6Bbt56VlrNXr74sXPhfduzYwYQJ97N//34KCgro0KETTZoEV9hnypQnbMsmU9m5LRbr/4m/v7XDYnLySe67725uvXU4vXtfT0xMGyIjoxg5MsqujBaL/f7nz58jJeUsgYGBdO3avcL5vbx86NWrD6tWrWDnzh0MHz6KaP9oADw8PQiMaFJhn+DgEFJSzpKfX1ij/yuzWcVisZCZmY9eX/V00xqN4zfbVXEoWYiNjSUrK4u0tDRbFU5SUhLh4eEVqlBSUlLo1KmT/cl0OvR6x57upqo49CU6d26R3b7CcY7GXFw7ibnzORJzPz+ViIjqv8wr61QdElKzff387PdVFGq0H8DlcyB5eakVjlcbwsMjWLjwfw7v5+fnX2HdhQvnAXj//Xd5//13r7hv6Xbp6da79Mv7Qzhi+vR/8tJL/8fJkyf4+OP3+fjj9wkJCeX66/tz++13EBfX7or7pqVZzx8eHnnFbSIimtlt66HzBMDg441JNVFgLMBb723bvrRjo6NPkazJ725tf584lCxER0fTvXt3Xn/9daZPn05mZiYfffQRY8eOrbDtoEGD+Oabbxg4cCDt27fnt99+Y+vWrTz11FO1VnghhHCGRx4x8sgjV/fgoK+/Lqx+o0r4+sKePflXte/QoWbAfFX71gWNpmINSekFslu3HoSEhF5x39Khi2bztX+emJg2fPPNAnbu3M7vv69j+/atnD59ip9+WsSSJT8ybdr/cccdd1a6b2lNRVV9AUq3uXwGy9JdjmUdJcqvOUFeQdf8WZzN4aEJs2bNYvr06QwePBiNRsOoUaOYMsU6rCQhIYHXXnuNkSNH8thjj6HVann88cfJzs6mZcuWfPjhh7Rv377WP4QQQgj3UjpZ0pAht9RoOubS7S9evFDp+6dOJbN37246dOhY6ZDLUlqtluuu620bZnnu3DkWLPiO+fPn8fHH7zNy5OhKR+2VJjSpqSlXPHZKylkAmjSxTwZK+09YVDOnck5SYMynmW/dTSFQFxyelCkkJIRZs2axdetWNm/ezHPPPWerStm1axcjR44ErE0Ojz/+OKtXr2bnzp0sWrSI/v37127phRBCuKX4+G4AFYZHlvrhh/8yadIEvvzyMwDatm2Ph4cnhw8fJLO0J3s5P//8E//85wx27dpZ6fF27drJPfeM5Y03ZtqtDw8P5/HHp+Hr60dhYQG5ubmV7h8eHk54eARZWVmVniMvL49t2zYDkJDQ3e49nUZPkFdZ58a0woucyTtd6XnqK4eThfrs5pu9advWl27dfBzqFCmEEMK5Bg8eSkhIKOvXr+H777+xm+0wMXE/n376MceOHSEmxlpL4O3tzbBhIzAajfzrXzMoLi7rn3boUCKLFv0XLy8vBgwYVOn5WreO4cyZ0yxb9it79+62e2/Tpt/Jy8slIqJZpcMuS40bNwGAf/3r77ZaBLCOBpw+/WXy8/O5/vr+hIdHVNi3hX9Lmvu1sM3BkF6YRomlpJoo1R8N5tkQOTmwe7cGVVVo1sxCJU1kQggh6gkvLy9mzPgnzz77BB988B4//LCANm3akJ2dzb59e1BVlTvvvNvuwVVTpkzl8OFEfv99PWPHjqRLl67k5OSwd+9uLBYLL78844r9HwICAnn00SeYNesdHn30ATp16kxwcCgXL17gwIF9aLVannrq/6os89ix49m/fy+rV69g4sRxxMd3w8vLi717d5GVlUWbNnE8//wrV9w/2BCCRtGQnHMSgBKzJAtOl5JiTRQAOnWSagUhhKjvOnfuyhdffMu8eV+xdetmtmzZhL+/P9269WDMmPHccMONdtt7e3vzwQdzmD//W1asWMbmzRvRanXEx3dn4sT76dmzV5XnGzduAsHBISxe/ANHjx4hMfEAgYFNGDx4KBMn3k9sbNVzAGk0Gl577XV69+7L//63mH379gAqUVHNmTDhPsaMGY+np2eVx2jiFYTRYiIl70xNQlRvKGo9f9JFenrN5lnYvl3DbbdZ53p46KESZsyQORYcpSgQEuJHWpqM+XcWibnzlY95SUkJ6empBAdHoNd7VL+zuGo6nabW5n1wdyaLif1pewHw8/AnJvDKHTLLMxpr/vuq0dTuZG8NprI+N7dsPIuvr3zrCiGEqJ+0ihatYh0Y4C5NEQ0mWbhwoSxZCA6WZEEIIUT9pCgKmkvJgkV1j9qWBpMslD5tEqBpU0kWhBBC1F+lcy+ouMf1qsEkCyZTWbLg4eEewRdCCNE4aS4NoVSlZsG5ys8EWsnkW0IIIUS9oSjWy6/FTXo2N5hkwVTuSawyx4IQQoj6THMpWVCxuEW/hQZzD37nnUa6dTNjMil07lz/Ay+EEKLx8tB6kH/p2WQl5hK8dF6uLVA1Gkyy0Lq1SuvW9ecpa0IIIcSVeGjK5kkoMRfX+2RBKuyFEEIIJ9Nqyu7V3aEZQpIFIYQQwsmUcsuSLDjJsWMK06Z5sm6d1q6joxBCCFEf6TV62/KFgvOYLfW7Gb1BJAtvveXJvHke3HmnN59/rq9+ByGEEMKF/D0DMOi8ASgyF3Eo4yAmS/2923X7ZMFohGXLrG0/QUEW7rnH6OISCSGEEFXTKBpa+kfbpn02Wko4n3/OxaW6MrdPFo4d01BQYG39GTDAjK+viwskhBBC1ICXzoso3yjb6+ySbOrrg6DdfuhkYWHZckhI/QyyEEK4sz/+2MHUqQ9f8X2dToe/fwCtW8cwevRYBgwY5MTSOWbmzFdZuvRnnnvuJUaMGHXFdc4SZAgmvSidfGMeJeZiis1FeOkMTi1DTbh9smA0lvUp1WpdWBAhhGjgDAYD/fvfWGF9Tk42J0+eYMeObezYsY0HH5zCfff92fkFdFMBngHkG/MAyC3Jk2ShLpQf/aDXS82CEELUlYCAQF55ZUal71ksFubP/5YPP3yPzz+fzc03DyMsLNzJJXRPvvqy9vN8Yx6hhLqwNJVz+z4LxnL9GfUyEEIIIVxCo9Fw990Tad++A2azma1bN7u6SG7DoPO2dXTMLs4iryTXxSWqyO1rFko7NwIY6l/NjRBCNCphYeEcPJhIdna23frExAPMnfsFu3fvIj8/j5CQptxwwwDuvffPBAYGVjhOenoa338/jw0b1nLhwgWCgoLo1KkLf/rTA7RsGW237aFDB1mw4Fv27t1DenoaGo2GsLBwrr/+Bu6990/4+fnV2eetDYqiEOrdlPP5qaionMw5SdsmbdFrParf2UncvmahoKBs2dtbmiGEEMJV8vPz2L37DwBat46xrV+69GceeGAS69atuXQR749GozB//rdMnnwvqakpdsdJSjrGn/98D9999zVms4W+ffsREBDIypXLmTz5Xg4fPmTbdvXqlTz00CRWrFhOSEgoffv2p23b9pw5c5pvv53LtGmPYrHU/xkSw73D8fPwB8BkMZKan+riEtlz+5qFTp0s3H9/CStX6mQ0hBBCOJnFYiEvL48jRw4xZ85HZGVl0bZte3r37gvAyZMneOONmXh6evKPf7xN9+49bft99tknzJ37H6ZPf5mPP/7ctv7vf3+F9PR0Jky4l4ceegztpd7rP/zwX9599w3+8Y/pfPnltxiNRt55559oNBref382nTp1sZUrOfkkDz54P4cOJbJ//166dIl3bmAcpCgKLf2jSUzfj0W1UGAsqH4nJ3L7ZKFdOwtvvlmMqhbjBsmjEMLNLDn2I//aNpO8S73V3YWv3pfne73EiJhRtXbMc+dS6devR5Xb9OrVl5deetV2gV+48HuMRiMPP/yoLVEAax+HBx54hI0b17Nv3x72799Hp06d2b9/L0ePHqFVq9Y88shUFKWsqXnMmHGsXr0CVVXJysqiqKiI667rQ1hYuF2iANCyZTTduvVkw4a1pKam1PtkAUCn0eGh8aTIXEiJpRhVVe0+vyu5fbJQSlFk6KQQovZ9uPvfHM064upiXJUPd/27VpOF8kMnVVXlwoXz7NmzC4DBg4fwl788RIsW0Xb77Ny5HYAePa6rcDxFUejVqw9JScfYtWsnnTp1ZteunQD07du/0gvlhx9+avf68tEZqqpy/vx5Dh8+aGveMBpLHP+wLuKh1VNkLsSiWjCrZnRK/bhM149SCCFEPfVYwpP8c+vf3bJm4dGEJ2r1mJUNndy7dzfPPvsEq1atIDa2LRMnTrJ7/8KF8wDcf/+EKo9dul16ehqAQ8MuN2/eyLJlP3P8eBIpKWcpLi4GsCUb9XRSxEopSllXwvo0m6MkC0IIUYURMaNq9e68oenSJZ6XXnqNF154hk8++YCIiGYMHjzE9n5p58IhQ262uxBerk2bWADM5po/fdFisfDCC0+zceMG9Ho9bdu2Z+jQYbRuHUOnTp1ZuHA+y5f/epWfzDXK16WoSLJQK8xm6NDBF71epWdPM198UeTqIgkhRKPTv/+N3HbbSH75ZQlvvfUP4uMTCA4OASA4OIRz51J58MFHiIiIquZI2Pa7ePFCpe/v3Lmd9PR0unfvwbZtW9i4cQNt2sTx1luzCAkJsds2P9+9aoMAtOWaHcwWM9ST5nW3Hjp54YJCZqbChQsacnLqRycQIYRojB57bBrBwcHk5ubw/vvv2tbHx3cDYNOmjZXuN2PGKzz44CR+/309gK0j4tatmyrd/pNPPmD69JfIzs5i//69AAwbNqJColBQUGB73x2GTpbSasqyA5Nafx5Z7dbJwoYNZUHt0aPmVVdCCCFql5+fH48+Og2AlSuXs2PHNgDGjr0LrVbLnDkf29aVWrz4B5Yv/5Vjx47QoUNHALp370mrVq05cuQwc+f+x277RYsWcPDgAdq0iaN16zYEBjYBYMuWjZjKzf2fnZ3F3/72AllZWQCUlLhPB0e9pmwipiJTYRVbOpdbN0NkZ5fVJsTGuk/mKIQQDdHQobfwyy9L2LlzG2+//U/mzp1Pu3btmTr1Kd577y2efHIKcXFtiYiI5NSpZE6cOI5Wq+Xll6cTFBQMWDslvvrq6zzxxCPMmfMRy5f/SqtWMZw5c5pjx47g4+PD9OmvAzB8+O0sXPg927Zt4a67RtO2bTvy8/PZt28PxcXFREe35uTJ42RkpLsyLA7x0fvYlvOMeYTS1IWlKePWNQvl+8Ho3DrtEUKIhuHpp5/Dw8OD06dPMW/eVwCMGTOeTz75nBtuGMiFCxfYtOl3ioqKGDRoCJ9++hUDB95kd4yYmDb85z/fMGrUGIqKivj993WkpV1kyJBb+Oyzr23DMyMiIm37WywWNm/eRErKWbp3v4533/2Al1+eDsDGjeudGoNrYdAZbP0WcoqzySupH/0uFLU+jc2oRHp67hUnW/rgAz3Tp3sB8PnnhYwYUX/ad9yRokBIiB9pabluNdTInUnMna98zEtKSkhPTyU4OAK9vv7Mw98Q6XQaTCapAa6J1PxUzl+a7lmn0RPXpC0eWg+Mxpr/vmo0EBxce8/EcPh+PD09nZdffplt27ah1WoZOXIkzz33HLrLbu0nT57Mzp077dYVFBQwfvx4pk+ffm2lvsRiKWuGkAmZhBBCNATh3uEUGPPJLcm59JyIFFr6R7u0TA43Qzz55JN4e3uzYcMGFi5cyObNm/nyyy8rbPfZZ5+xa9cu28+LL75IREQEjz32WG2UG7BvhtBq5bZMCCGE+yt9ToRyadaF+tDR0aFkITk5mW3btvHss89iMBho3rw5U6ZMYd68eVXud/z4cWbMmMFbb71F06a111nDaCxblpoFIYQQDYVOo7NNYlUfmigdaoY4evQogYGBhIWF2dbFxMSQkpJCTk4O/v7+le732muvMWrUKHr0qPoBJJVRFOtPZU6cKMt1IiLUK24naqY0fhJH55GYO1/5mEvcRX2mUTRYVDMm1QjlZnOsye9ubf9uO5Qs5OfnYzAY7NaVvi4oKKg0WdixYwd79uzhrbfeuqoCBgVduYPGJ5/AQw/Brl1w/fU+6PVXdQpxmdrsFCNqRmLufMHBfhQVFZGRoUGrVdDp3HpwmFuQGDvGR+9NdnE2JosJEya0WgWNRkOTJj54eXk5tSwOJQve3t4UFtq3nZS+9vHxqWwX5s+fz6233kpoaOhVFTAj48qjIQASEqw/2dlXdXhRjqJYv0DT06VnvrNIzJ2vfMxLSkqwWCyYzar01K9jMhrCcd46H7KLrRe3nKJc/LS+WCwWMjPz0euNVe6r0VR9s+0oh5KF2NhYsrKySEtLs02tmZSURHh4OH5+FQtlMplYtWoVH3744VUXUFXrR3tNYyIxdz6JufNJzEV9p9eUVZdb1LIe/TX53a3t322H6oSio6Pp3r07r7/+Onl5eZw+fZqPPvqIsWPHVrr94cOHKS4uplu3brVSWCGEqBuSNYh6qFzHA+uUSK77PXW4AWnWrFmYTCYGDx7MuHHj6N+/P1OmTAEgISGBJUuW2LY9ffo0AQEBeHp61l6JL1m2TMsXX+iZO1ePG037LYSoR0p7m5vNUj0u6h9duSdQZhVn2h7frbigZ67bzuA4ZoyBDRusgTx+PBdfXycXrAGS2QSdT2LufOVjbrGoXLyYgqengYCAIFcXrUGTPguOU1WVwxkHKTIXAeBjMeBl8SAqonW1CUNtz+Dotl1Tz5+3BsrLS8Xb28WFEUK4JUVR8PLypqgoH6Ox2NXFEcKOoihE+DazvlChpLiIbRe3uqRmwW0fv1T6xMngYBWN26Y8QghX8/UNwGgsJiPjAl5ePnh6GtBqNYBMwlCbLBYFs1mqzxxlUDxpog2koCCXk9nH+fLol4zpOsHp5XDbZKGkxPqH7CHPfhFCXAPruPWm5OVlU1RUQGFhrquL1CBpNBosVY2DF1fkiZa157Yy+9AnJOUmkVuSg59H5ZMg1hU3Thas/3p6SqYqhLg2Go0Gf/8m+PkFYjabUVW5qNUmRYEmTXzIzMyXvjlXQaPRsv/wQY7lHgNg78U9XN+sv1PL4JbJQnExFBRYl6W/ghCitiiKUuEJuuLaKQp4eXmh1xslWbhKCU278dWBzwHYfWGX05MFt2ztT07WoKrWZojoaLkDEEII0bB1Du1qWz6YccDp53fLZCEpqazYrVtLsiCEEKJha1Y6KgJIK7zo9PO7ZbKQnFzWS7lVK0kWhBBCNGyBnk3QKloAzuWfc/r53TJZCAhQ6djRTGysmbAwaQATQgjRsGkUDW0CYwE4lJFIdnGWc8/v1LPVkrvvNrFmTQEbNxZwww3m6ncQQggh3NyNzQcBYFEtrD+zzqnndstkQQghhGhsboi60ba8/dxWp55bkgUhhBDCDXRtWvYE5wNp+5x6bkkWhBBCCDfQ1LspYd7hAOxP24sznwPplsnCrFke3HGHgbvuMnD6tMzfLoQQonHoFNIZgMziTM7mnXHaed0yWVizRsvvv+tYvVqHl5erSyOEEEI4R6eQLrbl/U5sinDLZCEx0TrWNCzMQmioDJ0UQgjROHS2Sxb2Ou28bpcsWCyQmWltemjeXBIFIYQQjUdpMwTAPkkWrqy4uGxZr5dkQQghROMRHdAab50P4NwREW6XLOzZo7Uth4dLsiCEEKLx0CgaOoZ0AuBUbrLTZnJ0w2ShrMgye6MQQojGprMLOjm6XbKQkVE2VLJZM3mIlBBCiMalkws6ObpdsmA0li17eLiuHEIIIYQrlO/kKDULV2A0ltUsaLVVbCiEEEI0QO2COqDX6AHYlPK7U2Zy1NX5GWrZrbeaiIy0YDQqtGghzRBCCCEaFy+dF30j+7HuzBpO557iQPp+u9qGuuB2yULfvmb69pWOjUIIIRqvW1sPZ92ZNQCsPrWizpMFt2uGEEIIIRq7nuG9bMsnso/X+fkkWRBCCCHcTDPfZrZlZzxQyu2ShSNHNJw+rZCX5+qSCCGEEK7RxDMIncbakyCjKKPOz+d2fRbuuMPAhQsamjWzsGtXvquLI4QQQjidoijoNXpMFhNGs7H6Ha6RW9UsqCpkZVmHTgYGylTPQgghGi+9xjrZkMkiyYKdggIoKbEmC02aSLIghBCi8dJfaoYosZTU+bncKlkorVUAqVkQQgjRuOkuTcwkzRCXycwsSxakZkEIIURj5qnzAqDEUlzn53KrZKF8zYIkC0IIIRozb50BgAJjQZ2fy+FkIT09nSlTptCjRw969erFzJkzMZlMlW67bds27rzzThISEhgwYACzZ8++psKWr1mQZgghhBCNmbfOG4ACU0GdPx/C4WThySefxNvbmw0bNrBw4UI2b97Ml19+WWG7pKQkHnzwQSZMmMAff/zB7Nmz+c9//sOyZcuuurD55UZK+vpe9WGEEEIIt2e4lCwAFJoK6/RcDiULycnJbNu2jWeffRaDwUDz5s2ZMmUK8+bNq7Dtt99+y+DBgxk9ejSKotCuXTu+//57unfvftWFLSoqq1nw8pKaBSGEEI2X4VIzBFhrF+qSQ5MyHT16lMDAQMLCwmzrYmJiSElJIScnB39/f9v6vXv30rdvX5566ik2btxIUFAQkyZNYvz48Q4VUFGsPwAl5UaHeHqWrRe1ozSeElfnkZg7n8Tc+STmdSPEO9S2fLHwPKHeIbbXtR1rh5KF/Px8DAaD3brS1wUFBXbJQnZ2NnPnzuXdd9/ljTfeYNeuXTz00EMEBARwyy231PicQUF+tuWpU2HCBCguhvBwA4GBjpRe1FRwsF/1G4laJTF3Pom580nMa1dc0xg4ZF3OVdIJCam7+DqULHh7e1NYaN8uUvrax8fHbr2HhweDBw/mxhtvBKBnz57cfvvtLF261KFkISMjF4ul7LWfn/XHZIK0NEdKL6qjKNY/5vT0XOq4r4y4RGLufBJz55OY140QXYRtecuJHfQKusH2WqOxv9m+Vg4lC7GxsWRlZZGWlkZIiLW6IykpifDwcPz87AsVExNDSYn9rFJms9nhHpuqivxyOZnE3Pkk5s4nMXc+iXnt6hF2nW15a+pmu9jWdpwd6uAYHR1N9+7def3118nLy+P06dN89NFHjB07tsK2d911F6tWreKnn35CVVW2b9/O//73P26//fZaK7wQQgjRWMUEtiHYKxiAXRd21um5HB46OWvWLEwmE4MHD2bcuHH079+fKVOmAJCQkMCSJUsA6NOnDx999BFz586le/fuvPDCCzz33HMMHjz4qgv79dd6Zs/WM3++TrJTIYQQjZqiKET6RgGQXZxdt+dS63omh2uUnl7WZ6FPHx+SkjT4+qocP57n2oI1QIoCISF+pKVJu6KzSMydT2LufBLzujPix5vZmroZgLMPpaPXWp8XodHUbodSt5nu2WSCU6esY0GaN7dUs7UQQgjR8HmXm5ipwJRfxZbXxm2ShYsXFYxGa7LQsqUkC0IIIUT5WRzr8hkRbpMsFBWVLXt7X3k7IYQQorHw1kvNgp2SkrLpqDw8XFgQIYQQop7w1pXNcVRQh8+HcKNkoWzZw0N6yAghhBDlaxZy6nBEhNskC8XFZcuenq4rhxBCCFFfxAS2sS2vPrWyzs7jNslCbm5ZM4SPj9QsCCGEELe1HolW0QKw+NgPDs+SXFNukyzk5ZUlC/7+kiwIIYQQIYYQ+kb2A+B07ikuFJyvk/M49GwIV/L1VenUyYzRCCEhkiwIIYQQAGE+4bblfGPdTFjoNsnCwIFmBg6suzGkQgghhDvy1fvalnNKcurkHG7TDCGEEEKIiiJ8Im3Lp3NP1ck5JFkQQggh3FjrwBjbclLWsTo5hyQLQgghhBuL8GlmW04rvFgn53CbZGHxYh2jRxu4804DW7ZoXV0cIYQQol7Qasou5Xsu7q6Tc7hNsnDqlIaNG3WsW6cjPV2pfgchhBCiEfDSGmzLFwsu1Mk53CZZMBrLlmW6ZyGEEMKqQ3BH27Kvh1+dnMMtkwWd2wz4FEIIIeqWoigEewUDkFWcVSfncJtkwWQqW9brXVcOIYQQor4J8AwEIKexJwvlH1EtNQtCCCFEmQDPAACyi7OxqJZaP77bJAuZmfJsCCGEEKIy/h7WZEFFrZMpn90mWTh7tixZiIqq/axJCCGEcFfeeh/bcoGx9h+N4EbJgrWovr4q/v4uLowQQghRjxh0ZcMnc0tya/34bpEsqCqkpFhrFqRWQQghhLDX0r+lbflgxoFaP75bdBU0mWDatBKKiiAiQvorCCGEEOV1C+tpW95xbju3x46q1eO7RbKg18NTT5W4uhhCCCFEvdQxuJNtOTnnZK0f3y2aIYQQQghxZQadt23ZaKn9m2tJFoQQQgg356n1sC2XmBtpslBSAhkZUFAAFunfKIQQQtjRl0sWjBZjFVteHbdIFv74Q0u7dn5ER/vx6queri6OEEIIUa/oNWXPQSg2F9f68d0iWSgqKls2GGQ0hBBCCFGeRtGg01jHLDTamoX8/LLZG318qthQCCGEaKQ8NNaad2Nj7bOQV26aax8fqVkQQgghLuehtTZFNNpmiLy8spoFX19JFoQQQojL6TXWTo6NthkiO7ssWQgIkGRBCCGEuJyn1toM0WiHTpZPFgIDXVcOIYQQor7SX2qGqBeTMqWnpzNlyhR69OhBr169mDlzJiaTqdJtJ0+eTOfOnUlISLD9rF+/3uFCZmeXLUvNghBCCFGRx6VmiOI6qFlw+NkQTz75JGFhYWzYsIG0tDQeeeQRvvzySyZPnlxh2/379/P5559z3XXXXVMhs7LK1yxIsiCEEEJczkNbT0ZDJCcns23bNp599lkMBgPNmzdnypQpzJs3r8K2p0+fJjs7mw4dOlxzIc+dKyum1CwIIYQQFZWOhiixlKCqtXutdKhm4ejRowQGBhIWFmZbFxMTQ0pKCjk5Ofj7+9vW79u3Dx8fH6ZNm8a+ffsICQlh0qRJjB071qECKgp8+GERRUWgquDr69DuwgHKpQocjcYaa1H3JObOJzF3Pom5cwR4BuLn4QeAmcq7B1wth5KF/Px8DAaD3brS1wUFBXbJQklJCfHx8UybNo3Y2Fi2bt3K448/jo+PD7feemuNzxkU5Efv3o6UUlyroCA/Vxeh0ZGYO5/E3Pkk5nVr1Z9W1NmxHWqG8Pb2prCw0G5d6Wufy6ZWHDVqFJ999hkdOnRAr9fTr18/Ro0axdKlS6+xyEIIIYRwJoeShdjYWLKyskhLS7OtS0pKIjw8HD8/+4xx4cKFFRKDkpISPD3lQVBCCCGEO3EoWYiOjqZ79+68/vrr5OXlcfr0aT766KNK+yHk5eUxY8YMEhMTsVgsrF27lp9//pnx48fXWuGFEEIIUfcU1cEuk2lpaUyfPp2tW7ei0WgYNWoUzzzzDFqtloSEBF577TVGjhyJqqp8/PHHLFy4kPT0dJo3b85jjz3GLbfcUlefRQghhBB1wOFkQQghhBCNi1tM9yyEEEII15FkQQghhBBVkmRBCCGEEFWSZEEIIYQQVXJpsuDIEyzXrVvHiBEjiI+P59Zbb2XNmjVOLm3D4EjMv/vuO26++WYSEhK4+eabK30GiKieIzEvdeTIEbp27crWrVudVMqGxZGYb9u2jTvvvJOEhAQGDBjA7NmznVzahsGRmH/11VcMGjSIbt26MWLECJYvX+7k0jYsGRkZDBkypMrvi2u+hqouNHHiRPXpp59WCwoK1FOnTqm33Xab+umnn1bY7sSJE2rnzp3VFStWqEajUf3ll1/ULl26qOfOnXNBqd1bTWO+YsUKtUePHuquXbtUi8Wi/vHHH2qPHj3UZcuWuaDU7q2mMS9VUFCgDh8+XI2Li1O3bNnixJI2HDWN+bFjx9SuXbuqixYtUi0Wi3rw4EH1uuuuU5cuXeqCUru3msZ87dq1ap8+fdSkpCRVVVV12bJlart27dTTp087u8gNwo4dO9Sbbrqpyu+L2riGuqxmwZEnWP7444/06NGDm266CZ1Ox7Bhw+jZsyfz5893QcndlyMxP3/+PA888ADx8fEoikJCQgK9evVi+/btLii5+3Ik5qVee+01brrpJieWsmFxJObffvstgwcPZvTo0SiKQrt27fj+++/p3r27C0ruvhyJ+fHjx1FV1faj1WrR6/XodA49qkhgvTY+88wzTJs2rdrtrvUa6rJkobonWJZ37Ngx4uLi7Na1adOGQ4cOOaWsDYUjMb/nnnt48MEHba/T09PZvn07nTp1clp5GwJHYg6wePFikpOTeeyxx5xZzAbFkZjv3buXqKgonnrqKXr16sWtt97Ktm3bCA0NdXax3ZojMb/tttsICQlh2LBhdOzYkSeeeIJ//vOfhIeHO7vYbq9fv36sWLGCYcOGVbldbVxDXZYsVPcEy+q29fLyqrCdqJojMS/v4sWLPPDAA3Tq1Inhw4fXaRkbGkdinpSUxLvvvsvbb7+NVqt1WhkbGkdinp2dzdy5cxk5ciQbN25k+vTp/Otf/2LZsmVOK29D4EjMjUYj7dq1Y8GCBezevZvp06fz4osvcvjwYaeVt6EIDQ2tUY1MbVxDXZYsOPIES4PBQFFRkd26oqKiCtuJqjkS81K7d+9m7NixtGrVio8//liqCh1U05gXFxczbdo0/vrXvxIZGenUMjY0jvyee3h4MHjwYG688UZ0Oh09e/bk9ttvl6fjOsiRmM+YMYPY2Fi6dOmCh4cHY8aMIT4+nh9//NFp5W1sauMa6rJkwZEnWMbFxXH06FG7dceOHSM2NtYpZW0oHIk5WJ8cOmnSJO6//37efvttPDw8nFncBqGmMd+3bx8nT57kxRdfpEePHvTo0QOAhx9+mFdffdXZxXZrjvyex8TEUFJSYrfObDajyiz4DnEk5ikpKRVirtPp0Ov1TilrY1Qr19Da6I15te6++2512rRpam5urq337KxZsypsd+zYMbVz587qL7/8YuvJ2blzZ/X48eMuKLV7q2nMly1bpnbs2FFdv369C0rZsNQ05peT0RBXr6Yx37Rpk9qhQwd18eLFqsViUbdt26bGx8erK1eudEGp3VtNY/7uu++qvXr1Uvfv36+azWZ16dKlaufOndXExEQXlLrhqOr7ojauoS5NFi5evKg+/vjj6nXXXaf27t1b/ec//6maTCZVVVU1Pj5e/emnn2zbrl+/Xh05cqQaHx+v3nbbberatWtdVWy3VtOYDx8+XG3Xrp0aHx9v9/Pyyy+7svhuyZHf8/IkWbh6jsR87dq16h133KEmJCSogwcPVr/77jtXFdut1TTmRqNRnTVrljpw4EC1W7du6ujRo+WmpBZc/n1R29dQeeqkEEIIIaok0z0LIYQQokqSLAghhBCiSpIsCCGEEKJKkiwIIYQQokqSLAghhBCiSpIsCCGEEKJKkiwIIYQQokqSLAjhIu+//z5t27Z16OfMmTMMGjSItm3bkpyc7OqPUK3Sz/juu+/W2TkcjYczyiREQyNPBRLCRdq2bcuIESPs1qWnp7Np0ya8vb0ZPHhwhX28vb2dVTwhhLCRZEEIFxk6dChDhw61W7d161Y2bdpEkyZNeOutt1xUMiGEsCfNEEIIIYSoktQsCOGmiouL+eCDD1iyZAmpqakEBQUxZMgQnnjiCbvHAr///vt88MEHvPvuu2zevJmff/4ZnU7H+PHjeeaZZwDIycnhs88+47fffuPs2bN4e3sTHx/PAw88YHtcdnmLFy9m4cKFHD9+nLy8PMLCwujfvz8PPvgg4eHhlZZ3/fr1zJ49m8TERLRaLV27duWxxx4jISGhwrZHjx5lzpw5bN68maysLAIDA+nTpw8PPfQQbdq0qVF8Lly4wCeffMKaNWtIT0+nTZs2PPTQQzXaVwhhT2oWhHBTTzzxBB9//DERERH06dOHnJwcvv76ayZNmoTJZKqw/b///W8WL15M7969iYiIsF10U1JSuOOOO5g9ezaFhYX069eP2NhYNmzYwL333suCBQvsjjN37lyee+45Dhw4QIcOHRgwYABms5l58+YxduxY0tPTK5x7+fLlPPjgg2RkZHD99dfTpEkTfv/9d+6991727dtnt+3KlSu54447WLJkCUFBQQwePJigoCCWLFnCmDFjWLNmTbWxOXPmDOPGjWPevHno9XpuvPFGioqKmDp1KsuWLXMkzEIIwKWPqBZC2NuyZYsaFxenDhw48IrbDBw4UI2Li1P79u2rHjlyxLb+1KlTanx8vBoXF6du2rTJtn7WrFlqXFyc2q5dO3XXrl229WazWVVVVZ0wYYIaFxenzpw5Uy0pKbG9v3v3brVHjx5qx44d1aNHj6qqqqrFxcVq165d1euuu049f/68bVuj0ag+9thjalxcnPrhhx9WOHdcXJz6+eef223/8MMPq3FxceozzzxjW3/hwgW1a9euatu2bdWFCxfafe4FCxaobdu2VRMSEtRz585ViMfJkydt6x566CE1Li5Offnll22PSbZYLOp7771nK88777xzxRgLIexJzYIQburBBx8kNjbW9rp58+a2DpOHDx+usH18fDzx8fG21xqNhj179rBjxw7atm3L888/j16vt73ftWtXHn74YYxGI3PnzgUgNzeXwsJCDAYDgYGBtm11Oh1PP/00r776KgMGDKhw7g4dOvDnP//Zbvv777+/Qlnnz59PYWEht99+O2PGjLE7xtixYxk1ahT5+fl89913V4zLuXPnWLNmDcHBwbz00ktotVoAFEVh6tSptG/f/or7CiEqJ8mCEG6qsrb+0v4COTk5Fd6Li4ursG7Lli0AXHfddWg0Fb8OSi/827ZtAyA4OJjWrVuTmprKqFGj+PTTT20X++joaO6++246duxY4Thdu3atsC4iIgKwJiCltm/fDsCtt95aYXuAYcOG2ZWnMqXv9enTBw8PD7v3FEXhpptuuuK+QojKSQdHIdxU+U6MpXQ665+02Wyu8F5AQECFdampqQB8/fXXfP3111c817lz52zL7733HlOnTiUpKYm33nqLt956i6ZNmzJw4EDuuusuOnToUGF/f3//CutK7/jLl/XChQsANGvWrNJyREVFAXDx4sUrlrX0GGFhYVUeQwhRc5IsCOGmKqsJqIqiKBXWWSwWADp37kx0dHSN9m3bti2//vormzdvZvXq1WzcuJGTJ08yf/58/vvf//Lyyy9zzz33VHvuyqiqWuX2pe9fXmPgyLlKEyohRM3JX40QjVhoaCgA119/PdOmTavxflqtln79+tGvXz/AOqJi7ty5fPHFF7z11luMGzfOrv9DTTVt2pQTJ05w5syZSodInjlzBrA2h1xJaVPM2bNnK32/tOZBCFFz0mdBiEasZ8+eAGzYsMFWy1DeypUrGT58OK+99hpg7Q9w66238sorr9htFxkZyfPPP4+/vz8FBQV2/RCupjzLly+v9P1ff/0VsPaxuJLevXuj0WjYtGkT+fn5Fd5fu3btVZVNiMZMkgUhGrFevXrRoUMHDhw4wBtvvEFJSYntveTkZP7+979z9OhRWxNFbGwsp06dYvHixezcudPuWGvXriUnJ4eoqCiCgoKuqjzjxo3D29ubH3/8kcWLF9u998MPP/DTTz/h7e3N6NGjr3iM4OBghg8fTk5ODi+++KLdZ5o7dy5bt269qrIJ0ZhJM4QQjZiiKLzzzjvcf//9fPHFF/zyyy907NiRoqIiduzYgdFoZOjQoUycOBGAJk2a8Oyzz/KPf/yDe+65h/j4eJo2bcr58+fZvXs3Op2uQq2DI8LCwvjXv/7FU089xXPPPccXX3xBq1atOHHiBIcOHcJgMPDmm29esQNkqRdeeIFDhw6xdOlSdu3aRdeuXTl9+jSJiYkkJCSwa9euqy6jEI2RJAtCNHKtWrVi8eLFfPbZZ6xatYqNGzfi4+NDp06dGDduHCNHjrSNXACYNGkSTZs25bvvvuPQoUPs27ePJk2acNttt/HAAw9c8zwGQ4cOZeHChXz66ads3bqVpKQkQkNDGTt2LH/+85+JiYmp9hhBQUF8++23zJkzh6VLl7JmzRqaN2/O3//+dzw8PCRZEMJBilravVgIIYQQohLSZ0EIIYQQVZJkQQghhBBVkmRBCCGEEFWSZEEIIYQQVZJkQQghhBBVkmRBCCGEEFWSZEEIIYQQVZJkQQghhBBVkmRBCCGEEFWSZEEIIYQQVZJkQQghhBBVkmRBCCGEEFWSZEEIIYQQVfp/bKHLxQs8TMoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
    "    plt.plot(thresholds, precisions[:-1], \"b--\", label=\"Precision\", linewidth=2)\n",
    "    plt.plot(thresholds, recalls[:-1], \"g-\", label=\"Recall\", linewidth=2)\n",
    "    plt.legend(loc=\"center right\", fontsize=16) # Not shown in the book\n",
    "    plt.xlabel(\"Threshold\", fontsize=16)        # Not shown\n",
    "    plt.grid(True)                              # Not shown\n",
    "    plt.axis([0, 1, 0.5, 1.02])             # Not shown\n",
    "\n",
    "plt.figure(figsize=(6, 3))                      # Not shown\n",
    "plot_precision_recall_vs_threshold(precisions, recalls, thresholds)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 620,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_precision_vs_recall(precisions, recalls):\n",
    "    plt.plot(recalls, precisions, \"b-\", linewidth=2)\n",
    "    plt.xlabel(\"Recall\", fontsize=16)\n",
    "    plt.ylabel(\"Precision\", fontsize=16)\n",
    "    plt.axis([0.4, 1, 0.7, 1.02])\n",
    "    plt.grid(True)\n",
    "\n",
    "plt.figure(figsize=(4, 3))\n",
    "plot_precision_vs_recall(precisions, recalls)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 621,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1799033163367918"
      ]
     },
     "execution_count": 621,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "threshold_98_recall = thresholds[np.argmax(recalls <= 0.98)]\n",
    "threshold_98_recall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 622,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2_pred_proba = log_reg_2.predict_proba(X2_test_std)\n",
    "y2_pred_proba = [x[1] for x in y2_pred_proba]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 623,
   "metadata": {},
   "outputs": [],
   "source": [
    "y2_pred_98 = [1 if x >= threshold_98_recall else 0 for x in y2_pred_proba]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 624,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.9180327868852459, 0.9824561403508771, 0.9491525423728814)"
      ]
     },
     "execution_count": 624,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.precision_score(y_test, y2_pred_98),metrics.recall_score(y_test, y2_pred_98),metrics.f1_score(y_test, y2_pred_98)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 小结\n",
    "由于是预测疾病，所以查全率recall比查准率precision更重要  \n",
    "所以调整逻辑回归的阈值，使得在训练集上recall达到98%  \n",
    "用这个阈值在测试集上测试，precision、recall、f1分别为(0.9180327868852459, 0.9824561403508771, 0.9491525423728813)  \n",
    "不改变阈值时：precision: 0.9636363636363636, recall: 0.9298245614035088, F1: 0.9464285714285715 \n",
    "改变阈值导致的查准率下降可以接受  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
